home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Misc / RZToDoList / Source / ToDoInspector.m < prev    next >
Encoding:
Text File  |  1995-06-12  |  3.6 KB  |  175 lines

  1. /* 
  2.  * ToDoInspector - controller for the inspector panel
  3.  *
  4.  * You may freely copy, distribute and reuse the code in this example.
  5.  * This code is provided AS IS without warranty of any kind, expressed 
  6.  * or implied, as to its fitness for any particular use.
  7.  *
  8.  * Copyright 1995 Ralph Zazula (rzazula@next.com).  All Rights Reserved.
  9.  *
  10.  */
  11.  
  12. #import "ToDoInspector.h"
  13. #import "ToDoController.h"
  14. #import "ToDoItem.h"
  15. #import "objectLoadNib.h"
  16. #import <appkit/Window.h>
  17.  
  18. #define _controller _reservedToDoInspector1
  19.  
  20. /* 
  21.  * the class for the InspectorPanel - a Panel that
  22.  * refuses to become key or main
  23.  */
  24. @interface NoKeyWindow : Panel
  25. @end
  26.  
  27. @implementation NoKeyWindow
  28. - (BOOL)canBecomeKeyWindow { return NO; }
  29. - (BOOL)canBecomeMainWindow { return NO; }
  30. @end
  31.  
  32. @implementation ToDoInspector
  33.  
  34. - awakeFromNib
  35. {
  36.     [window setFrameUsingName:"ToDoInspector"];
  37.     [window setFrameAutosaveName:"ToDoInspector"];
  38.     [window setHideOnDeactivate:YES];
  39.     [showPendingSwitch setIntValue:[_controller showPending]];
  40.     [showPrivateSwitch setIntValue:[_controller showPrivate]];
  41.     [showCompletedSwitch setIntValue:[_controller showCompleted]];
  42.     return self;
  43. }
  44.  
  45. - window
  46. {
  47.     if(!window) {
  48.         [self loadNib:"Inspector"];
  49.     }
  50.     return window;
  51. }
  52.  
  53. - (int)type
  54. {
  55.     return [[typeMatrix selectedCell] tag];
  56. }
  57.  
  58. - switchType:sender
  59. {
  60.     id itemList = [_controller selectedItems];
  61.     
  62.     [itemList makeObjectsPerform:@selector(setType:) with:(id)[self type]];
  63.     
  64.     [_controller dirty:self];
  65.     [_controller update];
  66.         
  67.    return self;
  68. }
  69.  
  70. - completed:sender
  71. {
  72.     id itemList = [_controller selectedItems];
  73.     
  74.     [itemList makeObjectsPerform:@selector(setCompleted:) 
  75.         with:(id)[completedSwitch intValue]];
  76.         
  77.     [_controller dirty:self];
  78.     [_controller update];
  79.     return self;
  80. }
  81.  
  82. - private:sender
  83. {
  84.     id itemList = [_controller selectedItems];
  85.     
  86.     [itemList makeObjectsPerform:@selector(setPrivate:) 
  87.         with:(id)[privateSwitch intValue]];
  88.         
  89.     [_controller dirty:self];
  90.     [_controller update];
  91.     return self;
  92. }
  93.  
  94. - toggleShowPending:sender
  95. {
  96.     NXWriteDefault([NXApp appName], "ShowPending", [sender intValue] == 0 ? "NO" : "YES");
  97.     
  98.     [_controller setShowPending:[sender intValue]];
  99.     [_controller update];
  100.     return self;
  101. }
  102.  
  103. - toggleShowCompleted:sender
  104. {
  105.     NXWriteDefault([NXApp appName], "ShowCompleted", [sender intValue] == 0 ? "NO" : "YES");
  106.     
  107.     [_controller setShowCompleted:[sender intValue]];
  108.     [_controller update];
  109.     return self;
  110. }
  111.  
  112. - toggleShowPrivate:sender
  113. {
  114.     NXWriteDefault([NXApp appName], "ShowPrivate", [sender intValue] == 0 ? "NO" : "YES");
  115.     
  116.     [_controller setShowPrivate:[sender intValue]];
  117.     [_controller update];
  118.     return self;
  119. }
  120.  
  121. - windowDidUpdate:sender
  122. {
  123.     id itemList = [_controller selectedItems];
  124.     
  125.     [sender disableFlushWindow];
  126.     
  127.     if(!itemList || ([itemList count] > 1)) {
  128.         [typeMatrix setEnabled:NO];
  129.         if(!itemList) {
  130.             [statusMatrix setEnabled:NO];
  131.         } else {
  132.             [statusMatrix setEnabled:YES];
  133.         }
  134.         [createdText setStringValue:""];
  135.         [completedText setStringValue:""];
  136.         [priorityText setStringValue:""];
  137.     } else {
  138.         ToDoItem *item = [itemList lastObject];
  139.         
  140.         [typeMatrix setEnabled:YES];
  141.         [typeMatrix selectCellWithTag:[item type]];
  142.         [statusMatrix setEnabled:YES];
  143.         [completedSwitch setIntValue:[item isCompleted]];
  144.         [privateSwitch setIntValue:[item isPrivate]];
  145.         [createdText setStringValue:[item asciiStartDate]];
  146.         if([item isCompleted]) {
  147.             [completedText setStringValue:[item asciiCompletedDate]];
  148.         } else {
  149.             [completedText setStringValue:""];
  150.         }
  151.         [priorityText setIntValue:[item priority]];
  152.     }
  153.     
  154.     [[sender reenableFlushWindow] flushWindow];
  155.     
  156.     return self;
  157. }
  158.  
  159. @end
  160.  
  161. @implementation ToDoInspector(Private)
  162.  
  163. - _setController:anObject
  164. {
  165.     _controller = anObject;
  166.     return self;
  167. }
  168.  
  169. - _controller
  170. {
  171.     return _controller;
  172. }
  173.  
  174. @end
  175.